#!/bin/bash

# DataLink Java 23 配置更新脚本
# 批量更新所有模块的Java版本配置

set -e

# 颜色定义
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

log_info() {
    echo -e "${GREEN}[INFO]${NC} $1"
}

log_warn() {
    echo -e "${YELLOW}[WARN]${NC} $1"
}

log_error() {
    echo -e "${RED}[ERROR]${NC} $1"
}

# 更新单个pom.xml文件
update_pom_java_version() {
    local pom_file="$1"
    local module_name=$(dirname "$pom_file" | sed 's|^\./||')
    
    log_info "更新模块: $module_name"
    
    # 检查是否包含Java版本配置
    if grep -q "source.*[18]" "$pom_file" || grep -q "target.*[18]" "$pom_file"; then
        log_info "  发现Java 8配置，正在更新..."
        
        # 创建临时文件
        temp_file=$(mktemp)
        
        # 使用sed更新Java版本
        sed -e 's|<source>[18]</source>|<source>23</source>|g' \
            -e 's|<target>[18]</target>|<target>23</target>|g' \
            -e 's|<source>1\.8</source>|<source>23</source>|g' \
            -e 's|<target>1\.8</target>|<target>23</target>|g' \
            "$pom_file" > "$temp_file"
        
        # 替换原文件
        mv "$temp_file" "$pom_file"
        
        log_info "  ✓ Java版本已更新为23"
    else
        log_info "  ✓ 无需更新Java版本配置"
    fi
    
    # 检查是否需要添加编译器版本
    if ! grep -q "maven-compiler-plugin.*version" "$pom_file"; then
        log_info "  添加Maven编译器插件版本..."
        
        # 这里可以添加更复杂的XML处理逻辑
        # 暂时跳过，因为需要更精确的XML操作
        log_warn "  需要手动添加Maven编译器插件版本"
    fi
}

# 主函数
main() {
    log_info "=== DataLink Java 23 配置更新脚本 ==="
    echo
    
    # 检查是否在项目根目录
    if [ ! -f "pom.xml" ]; then
        log_error "未找到根pom.xml文件，请在项目根目录运行此脚本"
        exit 1
    fi
    
    log_info "搜索需要更新的pom.xml文件..."
    
    # 查找所有包含Java版本配置的pom.xml文件
    pom_files=$(find . -name "pom.xml" -exec grep -l "source.*[18]\|target.*[18]" {} \;)
    
    if [ -z "$pom_files" ]; then
        log_info "未找到需要更新的pom.xml文件"
        exit 0
    fi
    
    log_info "找到以下需要更新的文件:"
    echo "$pom_files" | while read -r file; do
        echo "  - $file"
    done
    echo
    
    # 更新每个文件
    echo "$pom_files" | while read -r pom_file; do
        update_pom_java_version "$pom_file"
        echo
    done
    
    log_info "=== 配置更新完成 ==="
    log_info "建议执行以下步骤:"
    echo "  1. 检查更新后的pom.xml文件"
    echo "  2. 运行 'mvn clean compile' 验证编译"
    echo "  3. 运行测试确保功能正常"
    echo "  4. 提交代码变更"
}

# 显示帮助信息
show_help() {
    echo "DataLink Java 23 配置更新脚本"
    echo
    echo "用法: $0 [选项]"
    echo
    echo "选项:"
    echo "  -h, --help    显示此帮助信息"
    echo "  --dry-run     仅显示将要更新的文件，不实际修改"
    echo
    echo "此脚本将:"
    echo "  1. 搜索所有包含Java 8配置的pom.xml文件"
    echo "  2. 将Java版本从8更新为23"
    echo "  3. 更新相关的编译器配置"
    echo
}

# 干运行模式
dry_run() {
    log_info "=== 干运行模式 - 仅显示将要更新的文件 ==="
    echo
    
    # 查找所有包含Java版本配置的pom.xml文件
    pom_files=$(find . -name "pom.xml" -exec grep -l "source.*[18]\|target.*[18]" {} \;)
    
    if [ -z "$pom_files" ]; then
        log_info "未找到需要更新的pom.xml文件"
        exit 0
    fi
    
    log_info "将要更新的文件:"
    echo "$pom_files" | while read -r file; do
        module_name=$(dirname "$file" | sed 's|^\./||')
        echo "  - $file ($module_name)"
        
        # 显示当前的Java版本配置
        java_configs=$(grep -n "source.*[18]\|target.*[18]" "$file" || true)
        if [ -n "$java_configs" ]; then
            echo "    当前配置:"
            echo "$java_configs" | sed 's/^/      /'
        fi
        echo
    done
}

# 解析命令行参数
while [[ $# -gt 0 ]]; do
    case $1 in
        -h|--help)
            show_help
            exit 0
            ;;
        --dry-run)
            dry_run
            exit 0
            ;;
        *)
            log_error "未知参数: $1"
            show_help
            exit 1
            ;;
    esac
done

# 运行主函数
main
